<?php

/**
 * This is the model class for table "catedratico".
 *
 * The followings are the available columns in table 'catedratico':
 * @property integer $id_rol_partido
 * @property string $registro_personal
 * @property integer $estado_laboral_id
 *
 * The followings are the available model relations:
 * @property RolPartido $idRolPartido
 * @property EstadoLaboral $estadoLaboral
 */
class Catedratico extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return Catedratico the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'catedratico';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
				array('id_rol_partido, registro_personal', 'required'),
				array('id_rol_partido, id_estado_laboral', 'numerical', 'integerOnly'=>true),
				array('registro_personal', 'length', 'max'=>100),
				// The following rule is used by search().
				// Please remove those attributes that should not be searched.
				array('id_rol_partido, registro_personal', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
				'rol_partido' => array(self::BELONGS_TO, 'RolPartido', 'id_rol_partido'),
				'estado_laboral' => array(self::BELONGS_TO, 'EstadoLaboral', 'id_estado_laboral'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
				'id_rol_partido' => 'Id Rol Partido',
				'registro_personal' => 'Registro Personal',
				'id_estado_laboral' => 'Estado Laboral',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('id_rol_partido',$this->id_rol_partido);
		$criteria->compare('registro_personal',$this->registro_personal,true);
		return new CActiveDataProvider($this, array(
				'criteria'=>$criteria,
		));
	}



	/**
	 * Guarda los datos de un catedratico en la base de datos en funcion de un array con los datos provenientes de un formulario
	 */
	public function guardarCatedratico($datos){
		$id_catedratico=-1;
		$datos_personales=$datos['datos_personales'];
		$nombrePartido=Persona::model()->obtenerNombrePartidoDeDatosPersonales($datos_personales);
		$id_partido=Partido::model()->guardarDatosPartido($datos,$nombrePartido);
		if($id_partido!=-1&&isset($id_partido)){
			$datos['id_partido']=$id_partido;
			$persona=new Persona();
			$datos_personales['id_partido']=$id_partido;
			$persona->attributes=$datos_personales;
			if(!$persona->save()){
				throw  new Exception("No se han guardado los datos de la persona por favor verifique");
			}
			/**Se asigna como rol de catedratico en la organizacion (no en el grupo de usuarios)*/
			$rolPartidoCatedratico=RolPartido::model()->obtenerRolPartido($id_partido, 'CATEDRATICO');
			/*Se crea el catedratico y se asocia a su rol partido*/
			$catedratico=new Catedratico();
			$catedratico->id_rol_partido=$rolPartidoCatedratico->id;
			
			/*El estado laboral no es obligatorio por la carga masiva*/
			if(isset($datos['datos_catedratico']['id_estado_laboral'])){
				$catedratico->id_estado_laboral=$datos['datos_catedratico']['id_estado_laboral'];
			}			
			
			$catedratico->registro_personal=$datos['datos_catedratico']['registro_personal'];
			$catedratico->save();
			$id_catedratico=$catedratico->id_rol_partido;
			$rolPartidoUsuario=RolPartido::model()->obtenerRolPartido($id_partido,'USUARIO');
			$usuario=new Usuario();
			$usuario->username=$catedratico->registro_personal;
			$usuario->password=$datos['datos_usuario'][	'password']!=''?trim($datos['datos_usuario']['password']):Yii::app()->authUtil->generatePassword();
			$usuario->activo=isset($datos['datos_usuario']['activo'])?1:0;
			$usuario->id_rol_partido=$rolPartidoUsuario->id;
			$usuario->save();
			//Asignamos al usuario al grupo de catedraticos
			$grupoCatedraticos=Grupo::model()->find("descripcion=:descripcion",array(':descripcion'=>'CATEDRATICOS'));
			$grupoCatedraticos->asignarUsuario($usuario);

		}
		else{
			throw  new Exception('No han podido guardarse los datos del partido, no podra realizarze ninguna otra transaccion');
		}
		return $id_catedratico;
	}


	public function actualizarDatosCatedratico($datos){
		//Actualizamos datos del catedratico	
		$catedratico=Catedratico::model()->findByPk($datos['datos_catedratico']['id_rol_partido']);
		$catedratico->attributes=$datos["datos_catedratico"];
		$catedratico->save();
		//Actualizamos datos del partido
		$partido=$catedratico->rol_partido->partido;
		$partido->nombre=$datos["datos_personales"]["nombre"];
		$partido->save();
		$partido->actualizarTelefono($datos["datos_contacto"]["telefono_celular"],'C');//Celular
		$partido->actualizarTelefono($datos["datos_contacto"]["telefono_domicilio"],'D');//Domicilio
		$partido->actualizarDireccion($datos['datos_contacto']['direccion1'],'D');//Domicilio	
		if(isset($datos['correos_electronicos'])){
			$partido->actualizarCorreosElectronicos($datos["correos_electronicos"]);
		}		
		//Actualizo los datos de la persona
		$persona=$partido->persona;
		$persona->attributes=$datos["datos_personales"];
		$persona->save();
		//Actualizo los datos del usuario
		$usuario=$partido->usuario();
		if(trim($datos["datos_usuario"]["password"])!=""){
			$usuario->password=$datos["datos_usuario"]["password"];
		}
		$usuario->username=$datos["datos_catedratico"]["registro_personal"];
		$usuario->activo=isset($datos["datos_usuario"]["activo"])?1:0;
		$usuario->save();
		return true;
	}

	/**
	 * Busca una lista de catedraticos en forma paginada en base al indice de inicio y al numero de registros por pagina
	 * @param int $indiceRegistroInicio registro inicial en el que se hara la busqueda
	 * @param int $numeroRegistrosPagina registros maximos por pagina a mostrar
	 * @return Lista de CActiveRecord con los registros paginados
	 */
	public function buscarCatedraticosPaginado($indiceRegistroInicio,$numeroRegistrosPagina,$busqueda=""){
		$busqueda=addcslashes($busqueda,'%_');
		$criteria=new CDbCriteria(array(
				'condition'=>"registro_personal like :busqueda",
				'params'=>array(':busqueda'=>"%$busqueda%"),
				'with'=>array(
						'rol_partido.partido',
						'rol_partido.partido.correos_electronicos',
						'rol_partido.partido.telefonos',
						'estado_laboral')
		));
		$resultados=Yii::app()->paginacionUtil->buscarRegistrosPaginados($indiceRegistroInicio,$numeroRegistrosPagina,$criteria,Catedratico::model());
		return $resultados;
	}

	public function buscarCatedraticosPaginadoArray($indiceRegistroInicio,$numeroRegistrosPagina,$busqueda=""){
		$catedraticos=$this->buscarCatedraticosPaginado($indiceRegistroInicio, $numeroRegistrosPagina,$busqueda);
		$catedraticosAArray=array();
		foreach ($catedraticos as $catedratico){
			$catedraticoAArray=array();
			//Inicializo campos opcionales a N/D
			$catedraticoAArray['celular']='N/D';
			$catedraticoAArray['telefono']='N/D';
			$catedraticoAArray['correo_electronico']='N/D';
				
			$catedraticoAArray['registro_personal']=$catedratico->registro_personal;
			$catedraticoAArray['nombre']=$catedratico->rol_partido->partido->nombre;
			$catedraticoAArray['id_partido']=$catedratico->rol_partido->partido->id;
			$catedraticoAArray['id_rol_partido']=$catedratico->id_rol_partido;
			if(count($catedratico->rol_partido->partido->correos_electronicos)>0){
				$catedraticoAArray['correo_electronico']=$catedratico->rol_partido->partido->correos_electronicos[0]->correo_electronico;
			}
			if(count($catedratico->rol_partido->partido->telefonos)>0){
				$telefonos=$catedratico->rol_partido->partido->telefonos;
				foreach ($telefonos as $telefono){
					if($telefono->tipo_telefono=='D'){
						$etiquetaTelefono='telefono';
					}
					else if($telefono->tipo_telefono=="C"){
						$etiquetaTelefono='celular';
					}
					$catedraticoAArray[$etiquetaTelefono]=$telefono->numero;
				}
			}
			$catedraticoAArray['creado']=$catedratico->rol_partido->creado;
			$estado_laboral="N/D";
			if (isset($catedratico->id_estado_laboral)){
				$estado_laboral=$catedratico->estado_laboral->descripcion;
			}
			$catedraticoAArray['estado_laboral']=$estado_laboral;
			$catedraticosAArray[]=$catedraticoAArray;
		}
		return $catedraticosAArray;
	}
	
	public function checkRegistroPersonal($id_rol_partido,$registro_personal,$nuevo=true){
		$valido=true;
		if($nuevo){
			if(Catedratico::model()->exists('registro_personal=:registro_personal',array(':registro_personal'=>$registro_personal))){
				$valido=false;
			}
		}
		else{
			$id_rol_partido=$_REQUEST['id_rol_partido'];
			$catedratico=Catedratico::model()->find('registro_personal=:registro_personal',array(':registro_personal'=>$registro_personal));
			//Se verifica si existe un catedratico con ese registro de personal
			//si existe  y no concuerda con el catedratico a ser editado, entonces el registro de personal
			//esta siendo utilizado por otro catedratico
			if(isset($catedratico->id_rol_partido)&&($catedratico->id_rol_partido!=$id_rol_partido)){
				$valido=false;
			}
		}
		return $valido;
	}
}